//验证id
import { z } from 'zod'

export const adminIdSchema = z.string().regex(/^\d+$/, 'ID必须是正整数').transform(Number)

//验证新增参数
export const newAdminSchema = z.object({
  username: z.string().min(6, '用户名不能为空').max(50, '用户名长度不能超过50'),
  password: z.string().min(6, '密码不能为空').max(255, '密码长度不能超过255'),
})

// 验证更新参数 - 至少传入username或password中的一个
export const updateAdminSchema = z
  .object({
    username: z.string().min(1, '用户名不能为空').max(50, '用户名长度不能超过50').optional(),
    password: z.string().min(6, '密码长度不能少于6位').max(255, '密码长度不能超过255').optional(),
  })
  .refine(
    (data) => {
      // 至少传入username或password中的一个
      return data.username !== undefined || data.password !== undefined
    },
    {
      message: '用户名和密码至少需要传入一个',
      path: ['username'],
    },
  )
  .refine(
    (data) => {
      // 如果提供了 username，则不能是空字符串
      if (data.username !== undefined) {
        return data.username.trim() !== ''
      }
      return true
    },
    {
      message: '用户名不能为空字符串',
      path: ['username'],
    },
  )
  .refine(
    (data) => {
      // 如果提供了 password，则不能是空字符串
      if (data.password !== undefined) {
        return data.password.trim() !== ''
      }
      return true
    },
    {
      message: '密码不能为空字符串',
      path: ['password'],
    },
  )

// 验证分页查询参数
export const adminPaginationSchema = z.object({
  current: z.number().int().positive().default(1),
  size: z.number().int().positive().default(10),
})
